home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / lib / logolib / cascade < prev    next >
Text File  |  1995-05-03  |  1KB  |  34 lines

  1. to cascade :cascade.limit [:cascade.inputs] 3
  2. if numberp :cascade.limit ~
  3.    [if lessp :cascade.limit 0 ~
  4.        [(throw "error (se [cascade doesn't like] :cascade.limit [as input]))] ~
  5.     make "cascade.limit `[greaterp :template.number ,[int :cascade.limit]]]
  6. local [cascade.templates template.vars cascade.final]
  7. make "cascade.templates []
  8. make "template.vars []
  9. make "cascade.final [?1]
  10. cascade.setup :cascade.inputs
  11. op cascade1 1 :template.vars
  12. end
  13.  
  14. to cascade.setup :inputs
  15. if emptyp :inputs [stop]
  16. if emptyp bf :inputs [make "cascade.final first :inputs stop]
  17. make "cascade.templates lput first :inputs :cascade.templates
  18. make "template.vars lput first bf :inputs :template.vars
  19. cascade.setup bf bf :inputs
  20. end
  21.  
  22. to cascade1 :template.number :template.vars
  23. if apply :cascade.limit :template.vars [op apply :cascade.final :template.vars]
  24. op cascade1 (:template.number+1) (cascade.eval :cascade.templates)
  25. end
  26.  
  27. to cascade.eval :cascade.templates
  28. if emptyp :cascade.templates [op []]
  29. op fput (apply first :cascade.templates :template.vars) ~
  30.         (cascade.eval bf :cascade.templates)
  31. end
  32.  
  33. bury [cascade cascade.setup cascade1 cascade.eval]
  34.